package thread;

class Singleton {
    //单例模式 —— 饿汉模式
    //饿汉模式是因为，当我们在 类加载的时候呢，这个 静态成员 就会 初始化
    private static Singleton singleton = new Singleton();//创建私有的 实例，并且是 static 的

    private int a = 10;
    public int getA() {
        return a;
    }

    public static Singleton getSingleton() {
        return singleton;
    }

    private Singleton() {
        //这里的私有的构造方法呢，是 单例模式的点睛之笔，方式 main等线程中 创建 Singleton这个实例
    }
}

class SingletonLazy {
    //单例模式 —— 懒汉模式
    //懒汉模式 创建实例呢是在第一次使用的时候，而不是在程序启动的时候
    private static SingletonLazy singletonLazy = null;

    public static SingletonLazy getSingletonLazy() {
        if(singletonLazy == null) {
            singletonLazy = new SingletonLazy();
        }
        return singletonLazy;
    }

    private SingletonLazy() {

    }
}

public class Demo20 {
    //线程的 单例模式 —— 就是只有一个 实例 的模式
    public static void main(String[] args) {
        Singleton singleton1 = Singleton.getSingleton();
        System.out.println(singleton1.getA());
        Singleton singleton2 = Singleton.getSingleton();
        System.out.println(singleton1 == singleton2);
    }
}
